"""电影应用信号处理模块

定义了处理Django模型信号的处理器函数。
"""

from typing import Any, Type

from django.contrib.auth import get_user_model
from django.db.models.base import ModelBase
from django.db.models.signals import post_save
from django.dispatch import receiver

from movies.models import UserMoviePreferences

User = get_user_model()


@receiver(post_save, sender=User)
def create_or_update_user_movie_preferences(
    sender: Type[ModelBase], instance: Any, created: bool, **kwargs: dict[str, Any]
) -> None:
    """
    当用户保存时创建或更新用户电影偏好设置

    Args:
        sender: 发送信号的模型类
        instance: 用户实例
        created: 是否为新创建的用户
        **kwargs: 其他关键字参数
    """
    if created:
        # 当创建新用户时，为其创建电影偏好设置对象
        UserMoviePreferences.objects.create(user=instance)
    else:
        # 当更新用户时，保存其电影偏好设置
        instance.movie_preferences.save()
